package com.redis.annotation;

import com.redis.lock.DefaultKeyGenerator;
import com.redis.lock.KeyGenerator;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface CacheLock {

    String prefix() default "";

    /**
     * 默认使用redssion 的 默认锁时间，开启看门狗机制
     */
    int lockTime() default -1;


    /**
     * 当设置了lockTime 以后，设置等待获取锁的最长时间 lockTime 大于0 时生效
     */
    int waitTime() default 1;

    /**
     * 时间单位
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;

    /**
     * key 生成方式
     */
    Class<? extends KeyGenerator> keyGenerator() default DefaultKeyGenerator.class;


    boolean fair() default false;

    /**
     * 以spel 表达式来指定锁健的生成，一使用在业务层的方法上，必须设置 lockTime()>0,根据业务需要来设置，waitTime(),等待加锁时间，超过时间返回异常，timeUnit()
     */
    String[] keys() default "";
}
